package 栈队列与哈希表;

import java.util.ArrayList;

/**
 * 实现一个队列的数据结构，使其具有入队列、出队列、查看队列首尾元素、查看队列大小等功能
 */
public class B如何实现队列<T> {
    private ArrayList<T> arr = new ArrayList<>();
    //队列头
    private int front;
    //队列尾
    private int rear;

    public B如何实现队列() {
        front = 0;
        rear = 0;
    }

    //判断队列是否为空
    public boolean isEmpty() {
        return front == rear;
    }

    public int size() {
        return rear - front;
    }

    //返回队列首元素
    public T getFront() {
        if (isEmpty()) {
            return null;
        }
        return arr.get(front);
    }

    //返回队列尾元素
    public T getBack() {
        if (isEmpty()) {
            return null;
        }
        return arr.get(rear - 1);
    }

    public void deQueue() {
        if (rear > front) {
            front++;
        } else {
            System.out.println("队列已经为空");
        }
    }

    public void enQueue(T item) {
        arr.add(item);
        rear++;
    }

    public static void main(String[] args) {
        B如何实现队列<Integer> queue = new B如何实现队列<>();
        queue.enQueue(1);
        queue.enQueue(2);
        System.out.println("队列头元素为：" + queue.getFront());
        System.out.println("队列尾元素为：" + queue.getBack());
        System.out.println("队列大小为：" + queue.size());
    }


}


class BB用链表实现队列<T> {
    private LNode<T> pHead;
    private LNode<T> pEnd;

    //分配头结点
    public BB用链表实现队列() {
        pEnd = pHead = null;
    }

    //判断队列是否为空，如果为空返回true，否则返回false
    boolean empty() {
        if (pHead == null) {
            return true;
        } else {
            return false;
        }
    }

    //获取栈中元素的个数
    int size() {
        int size = 0;
        LNode<T> p = pHead;
        while (p != null) {
            p = p.next;
            size++;
        }
        return size;
    }

    //入队列，把元素e加到队列尾
    void enQueue(T e) {
        LNode<T> p = new LNode<>();
    }
}